package com.github.cakin.shiro.chapter16.web.controller;

import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * @className: LoginController
 * @description: 登录控制器
 * @date: 2020/5/26
 * @author: cakin
 */
@Controller
public class LoginController {
    /**
     * 功能描述：用于显示登录表单页面，
     * * 其中 shiro authc 拦截器进行登录，登录失败的话会把错误存到 shiroLoginFailure 属性中，
     * * 在该控制器中获取后来显示相应的错误信息。
     *
     * @param req   用户请求
     * @param model 返回给前端的数据
     * @return String 前端显示页
     * @author cakin
     * @date 2020/5/26
     * @description:
     */
    @RequestMapping(value = "/login")
    public String showLoginForm( HttpServletRequest req, Model model ) {
        String exceptionClassName = (String) req.getAttribute("shiroLoginFailure");
        String error = null;
        if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
            error = "用户名/密码错误";
        } else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
            error = "用户名/密码错误";
        } else if (exceptionClassName != null) {
            error = "其他错误：" + exceptionClassName;
        }
        model.addAttribute("error", error);
        return "login";
    }
}
